common.skill

Apex ট্রিগারস (Apex Triggers)

Computer Programming - এপেক্স (Apex)
267
267

Apex Triggers হলো Apex কোডের এমন একটি ফিচার যা Salesforce ডেটাবেজে নির্দিষ্ট ইভেন্ট ঘটলে স্বয়ংক্রিয়ভাবে কার্যকর হয়। Apex Triggers মূলত Salesforce ডেটাবেজের উপর ভিত্তি করে কাস্টম লজিক তৈরি করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, নতুন রেকর্ড তৈরি হওয়া, আপডেট হওয়া বা ডিলিট করা হলে নির্দিষ্ট কার্যক্রম স্বয়ংক্রিয়ভাবে সম্পন্ন করতে Triggers ব্যবহার করা হয়।

Apex Trigger-এর বৈশিষ্ট্য

  1. ইভেন্ট চালিত কার্যক্রম: Apex Trigger স্বয়ংক্রিয়ভাবে কার্যকর হয় যখন ডেটাবেজে নির্দিষ্ট ইভেন্ট (Insert, Update, Delete) ঘটে।
  2. বিভিন্ন টাইমিং: Apex Trigger বিভিন্ন ইভেন্টের পূর্বে (before) বা পরে (after) চালানো যায়।
  3. ব্যবসায়িক নিয়ম বাস্তবায়ন: Trigger ব্যবহার করে ডেটার উপর কাস্টম ভ্যালিডেশন বা প্রক্রিয়া চালানো সহজ হয়।

Apex Trigger-এর টাইমিং এবং ইভেন্টস

Apex Trigger সাধারণত দুটি টাইমিংয়ে কাজ করে:

  • Before Trigger: ডেটা সেভ হওয়ার আগে কার্যকর হয়। এটি সাধারণত ডেটা ভ্যালিডেশন বা ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়।
  • After Trigger: ডেটা সেভ হওয়ার পর কার্যকর হয়। এটি সাধারণত অন্যান্য অবজেক্টের উপর নির্ভরশীল কার্যক্রম চালানোর জন্য ব্যবহৃত হয়।

Trigger ইভেন্টগুলো হলো:

  1. before insert: নতুন রেকর্ড সেভ হওয়ার আগে কার্যকর হয়।
  2. after insert: নতুন রেকর্ড সেভ হওয়ার পর কার্যকর হয়।
  3. before update: রেকর্ড আপডেট হওয়ার আগে কার্যকর হয়।
  4. after update: রেকর্ড আপডেট হওয়ার পর কার্যকর হয়।
  5. before delete: রেকর্ড ডিলিট হওয়ার আগে কার্যকর হয়।
  6. after delete: রেকর্ড ডিলিট হওয়ার পর কার্যকর হয়।
  7. after undelete: রেকর্ড পুনরুদ্ধার হওয়ার পর কার্যকর হয়।

Trigger Structure

একটি Trigger লেখার জন্য ডাটাবেজ অবজেক্ট এবং ইভেন্ট উল্লেখ করতে হয়। Trigger লেখার সাধারণ Syntax:

trigger TriggerName on ObjectName (events) {
    // Trigger logic
}

উদাহরণ:

trigger AccountTrigger on Account (before insert, after insert) {
    if (Trigger.isBefore) {
        if (Trigger.isInsert) {
            // Insert-এর আগে কার্যক্রম
            System.debug('Before Insert Trigger Executed');
        }
    }
    
    if (Trigger.isAfter) {
        if (Trigger.isInsert) {
            // Insert-এর পরে কার্যক্রম
            System.debug('After Insert Trigger Executed');
        }
    }
}

এখানে AccountTrigger নামে একটি Trigger তৈরি করা হয়েছে যা Account অবজেক্টের উপর before insert এবং after insert ইভেন্টে কাজ করবে।


Trigger Context Variables

Trigger চালানোর সময় কিছু Trigger Context Variables পাওয়া যায় যা Trigger-এর কার্যক্রম বুঝতে সহায়ক। Context Variables ট্রিগারের সময় নির্দিষ্ট ডেটা এবং তথ্য প্রদান করে।

কিছু সাধারণ Context Variables

  • Trigger.new: নতুন মান ধারণ করে, যা Insert বা Update ইভেন্টে পরিবর্তিত ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।
  • Trigger.old: পূর্বের মান ধারণ করে, যা Update বা Delete ইভেন্টে আগের ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়।
  • Trigger.isInsert: Insert ইভেন্টের জন্য true রিটার্ন করে।
  • Trigger.isUpdate: Update ইভেন্টের জন্য true রিটার্ন করে।
  • Trigger.isDelete: Delete ইভেন্টের জন্য true রিটার্ন করে।
  • Trigger.isBefore: Before Trigger এর জন্য true রিটার্ন করে।
  • Trigger.isAfter: After Trigger এর জন্য true রিটার্ন করে।

উদাহরণ: Simple Apex Trigger

ধরুন, আমরা একটি Trigger তৈরি করতে চাই, যা নতুন Account রেকর্ড তৈরি হওয়ার পর একটি স্বাগতম বার্তা প্রদর্শন করবে।

trigger AccountWelcomeMessage on Account (after insert) {
    for (Account acc : Trigger.new) {
        System.debug('Welcome, ' + acc.Name + ' to our platform!');
    }
}

এখানে AccountWelcomeMessage Trigger নতুন Account রেকর্ড Insert হওয়ার পর after insert ইভেন্টে কাজ করবে এবং প্রতিটি নতুন রেকর্ডের জন্য স্বাগতম বার্তা প্রদর্শন করবে।


উদাহরণ: Before Update Trigger

ধরুন, আমরা একটি Trigger তৈরি করতে চাই, যা Account রেকর্ড আপডেট হওয়ার আগে Industry ফিল্ড চেক করবে এবং সেটি খালি থাকলে একটি ডিফল্ট মান সেট করবে।

trigger SetDefaultIndustry on Account (before update) {
    for (Account acc : Trigger.new) {
        if (acc.Industry == null) {
            acc.Industry = 'Technology';
        }
    }
}

এখানে SetDefaultIndustry Trigger before update ইভেন্টে কাজ করবে এবং Industry ফিল্ড খালি থাকলে সেটি Technology মান দিয়ে পূরণ করবে।


Apex Trigger-এর সুবিধা এবং সীমাবদ্ধতা

সুবিধা

  1. স্বয়ংক্রিয় কার্যক্রম: Trigger ব্যবহার করে স্বয়ংক্রিয়ভাবে কার্যক্রম সম্পন্ন করা যায়।
  2. ডেটা সঠিকতা: ডেটা সঠিকভাবে সেভ করার জন্য Trigger কাস্টম ভ্যালিডেশন এবং প্রক্রিয়া নিশ্চিত করে।
  3. বহুমুখী ব্যবহার: Trigger-এর মাধ্যমে একাধিক অবজেক্টের উপর নির্ভরশীল কার্যক্রম পরিচালনা করা যায়।

সীমাবদ্ধতা

  1. গভর্নর লিমিট: Salesforce প্ল্যাটফর্মের গভর্নর লিমিট থাকার কারণে অতিরিক্ত প্রসেসিং সীমাবদ্ধ।
  2. কমপ্লেক্স ডিবাগিং: Trigger এর কোড ডিবাগ করা কিছুটা জটিল হতে পারে।
  3. অপ্টিমাইজেশন দরকার: Trigger কোড অপ্টিমাইজ না করলে প্ল্যাটফর্মে অতিরিক্ত লোড সৃষ্টি করতে পারে।

সংক্ষেপে Apex Trigger

  • Apex Trigger: ডেটাবেজ ইভেন্টে স্বয়ংক্রিয় কার্যক্রম সম্পন্ন করার জন্য ব্যবহৃত হয়।
  • Trigger Events: before insert, after insert, before update, after update, before delete, after delete, এবং after undelete।
  • Context Variables: Trigger চালানোর সময় বিশেষ কিছু ভ্যারিয়েবল পাওয়া যায়, যা Trigger কার্যক্রম বুঝতে সহায়ক।

Apex Trigger ব্যবহার করে Salesforce প্ল্যাটফর্মে কাস্টম লজিক ও অটোমেশনের মাধ্যমে ব্যবসায়িক প্রক্রিয়া সহজ ও কার্যকরী করা সম্ভব।

common.content_added_by

Apex Trigger এর মৌলিক ধারণা

234
234

Apex Trigger হলো Apex প্রোগ্রামিং ভাষায় লেখা একটি বিশেষ কোড ব্লক যা Salesforce ডেটাবেজ ইভেন্টের উপর ভিত্তি করে নির্দিষ্ট কার্যক্রম স্বয়ংক্রিয়ভাবে চালায়। যখন একটি নির্দিষ্ট ডেটাবেজ ইভেন্ট যেমন, insert, update, delete অথবা undelete সংঘটিত হয়, তখন Trigger স্বয়ংক্রিয়ভাবে কার্যকর হয় এবং নির্দিষ্ট লজিক বা কোড চালাতে পারে।


Apex Trigger এর মূল উদ্দেশ্য

Trigger-এর মাধ্যমে Salesforce প্ল্যাটফর্মে ডেটা প্রক্রিয়াকরণ আরও সহজ হয়। উদাহরণস্বরূপ, যখন একটি নতুন রেকর্ড তৈরি হয় তখন কিছু ডেটা স্বয়ংক্রিয়ভাবে সেট করতে বা যখন একটি রেকর্ড ডিলিট করা হয় তখন সম্পর্কিত অন্য রেকর্ডও মুছে ফেলতে Trigger ব্যবহৃত হয়। এটি বিশেষভাবে ডেটা ভ্যালিডেশন, ডেটা আপডেট, এবং রেকর্ড কাস্টমাইজেশনে সহায়ক।


Apex Trigger এর প্রকারভেদ

Apex Trigger মূলত দুই ধরনের হতে পারে:

Before Trigger:

  • Before Trigger ডেটাবেজে রেকর্ড সেভ হওয়ার আগে কার্যকর হয়।
  • এটি সাধারণত ডেটা ভ্যালিডেশন এবং ডেটা সেট করার জন্য ব্যবহৃত হয়।
  • উদাহরণ: নতুন রেকর্ডে কিছু ডিফল্ট মান সেট করা বা রেকর্ডের নির্দিষ্ট ফিল্ড আপডেট করা।

After Trigger:

  • After Trigger ডেটাবেজে রেকর্ড সেভ হওয়ার পরে কার্যকর হয়।
  • এটি সাধারণত সম্পর্কিত অন্য অবজেক্ট বা রেকর্ড আপডেট করার জন্য ব্যবহৃত হয়।
  • উদাহরণ: একটি রেকর্ড তৈরি হলে সম্পর্কিত রেকর্ডগুলিতে নির্দিষ্ট মান আপডেট করা।

Apex Trigger এর মৌলিক সিনট্যাক্স

Apex Trigger ডিক্লেয়ার করার জন্য trigger কিওয়ার্ড ব্যবহার করা হয় এবং নির্দিষ্ট অবজেক্টের সাথে ট্রিগারটি সংযুক্ত থাকে।

trigger TriggerName on ObjectName (trigger_events) {
    // Trigger logic goes here
}
  • TriggerName: Trigger এর নাম
  • ObjectName: যে অবজেক্টের জন্য Trigger কাজ করবে
  • trigger_events: ইভেন্ট যেমন, before insert, after update, before delete ইত্যাদি

উদাহরণ: Before Trigger

নিচে একটি Before Insert Trigger উদাহরণ দেয়া হলো, যেখানে Account অবজেক্টের নতুন রেকর্ডে কিছু ডিফল্ট মান সেট করা হয়েছে।

trigger AccountBeforeInsert on Account (before insert) {
    for (Account acc : Trigger.new) {
        if (acc.Industry == null) {
            acc.Industry = 'Technology'; // ডিফল্ট মান সেট করা হচ্ছে
        }
    }
}
  • এখানে, before insert ইভেন্টটি ব্যবহৃত হয়েছে।
  • নতুন Account রেকর্ড তৈরি হলে, যদি Industry ফিল্ড ফাঁকা থাকে, তাহলে এতে Technology ডিফল্ট মান সেট করা হবে।

উদাহরণ: After Trigger

নিচে একটি After Update Trigger উদাহরণ দেয়া হলো, যেখানে Contact অবজেক্টের রেকর্ড আপডেট হওয়ার পরে Account অবজেক্টে কিছু পরিবর্তন আনা হয়েছে।

trigger ContactAfterUpdate on Contact (after update) {
    Map<Id, Account> accountMap = new Map<Id, Account>();

    for (Contact con : Trigger.new) {
        if (con.AccountId != null) {
            Account acc = new Account(Id = con.AccountId);
            acc.Last_Contacted__c = Date.today();
            accountMap.put(acc.Id, acc);
        }
    }

    update accountMap.values();
}
  • এখানে after update ইভেন্ট ব্যবহার করা হয়েছে।
  • যখন Contact অবজেক্টের একটি রেকর্ড আপডেট করা হয়, তখন সংশ্লিষ্ট Account রেকর্ডের Last_Contacted__c ফিল্ডে বর্তমান তারিখ যোগ করা হয়।

Trigger Context Variables

Apex Trigger-এ কিছু বিশেষ ভেরিয়েবল রয়েছে, যেগুলো Trigger চলার সময় প্রয়োজনীয় ডেটা এবং প্রসঙ্গ প্রদান করে। কিছু গুরুত্বপূর্ণ Context Variables:

  • Trigger.new: নতুন রেকর্ডসমূহের লিস্ট রাখে, যা insert এবং update ইভেন্টে ব্যবহৃত হয়।
  • Trigger.old: পুরাতন রেকর্ডসমূহের লিস্ট রাখে, যা update এবং delete ইভেন্টে ব্যবহৃত হয়।
  • Trigger.isInsert: যদি Trigger insert ইভেন্টে কাজ করে, তবে true রিটার্ন করে।
  • Trigger.isUpdate: যদি Trigger update ইভেন্টে কাজ করে, তবে true রিটার্ন করে।
  • Trigger.isDelete: যদি Trigger delete ইভেন্টে কাজ করে, তবে true রিটার্ন করে।

Apex Trigger ব্যবহারের সুবিধা

  1. স্বয়ংক্রিয় ডেটা প্রক্রিয়াকরণ: Trigger স্বয়ংক্রিয়ভাবে ডেটা সেট, আপডেট, এবং মুছে ফেলতে সাহায্য করে।
  2. ডেটা কনসিস্টেন্সি: সম্পর্কিত ডেটা এবং রেকর্ডের মধ্যে স্বয়ংক্রিয়ভাবে সংযোগ স্থাপন ও সামঞ্জস্য রাখা যায়।
  3. ব্যবসায়িক নিয়ম প্রয়োগ: Trigger ব্যবহার করে ব্যবসায়িক নিয়ম অনুযায়ী ডেটা নিয়ন্ত্রণ করা যায়।
  4. কোড সংরক্ষণ ও পুনরায় ব্যবহারযোগ্যতা: নির্দিষ্ট লজিক একবার লেখার পরে Trigger এর মাধ্যমে পুনরায় ব্যবহার করা যায়।

সংক্ষেপে:

  • Apex Trigger হলো একটি স্বয়ংক্রিয় প্রক্রিয়া, যা ডেটাবেজ ইভেন্টের উপর নির্ভর করে নির্দিষ্ট লজিক কার্যকর করে।
  • Trigger মূলত Before এবং After ইভেন্টের ভিত্তিতে কাজ করে।
  • Trigger Context Variables এর মাধ্যমে Trigger চলাকালীন প্রয়োজনীয় ডেটা এবং প্রসঙ্গ পাওয়া যায়।

এইভাবে Apex Trigger ব্যবহার করে Salesforce প্ল্যাটফর্মে বিভিন্ন ডেটা প্রসেসিং এবং ব্যবসায়িক কার্যক্রমকে সহজ ও স্বয়ংক্রিয় করা যায়।

common.content_added_by

Before এবং After Trigger এর ব্যবহার

250
250

Before Trigger এবং After Trigger হলো Apex Trigger-এর দুটি প্রধান টাইমিং, যা Salesforce ডেটাবেজে ইভেন্টের উপর নির্ভর করে বিভিন্ন কাজ সম্পন্ন করতে ব্যবহৃত হয়। Before Trigger ডেটা সেভ হওয়ার আগে কার্যকর হয়, এবং After Trigger ডেটা সেভ হওয়ার পর কার্যকর হয়। এই দুটি টাইমিং বিভিন্ন প্রয়োজন অনুযায়ী ব্যবহার করা হয়।


১. Before Trigger এর ব্যবহার

Before Trigger সাধারণত ডেটা সেভ হওয়ার আগে ডেটা ভ্যালিডেশন বা ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। এই Trigger-এ ডেটা সরাসরি পরিবর্তন বা মডিফাই করা যায়, কারণ ডেটা এখনও ডেটাবেজে সেভ হয়নি। Before Trigger-এ ডেটার মান পরিবর্তন করা হলে সেই পরিবর্তিত মান ডেটাবেজে সেভ হবে।

উদাহরণ: Before Insert Trigger

ধরুন, আমরা একটি Trigger তৈরি করতে চাই, যা নতুন Account রেকর্ড ইনসার্ট করার আগে Industry ফিল্ড চেক করবে এবং সেটি খালি থাকলে Technology মান দিয়ে পূরণ করবে।

trigger SetDefaultIndustry on Account (before insert) {
    for (Account acc : Trigger.new) {
        if (acc.Industry == null) {
            acc.Industry = 'Technology';
        }
    }
}

এখানে SetDefaultIndustry Trigger before insert ইভেন্টে কাজ করবে। যদি Industry ফিল্ড খালি থাকে, তাহলে এটি Technology মান সেট করবে এবং তারপর রেকর্ডটি ডেটাবেজে সেভ হবে।

উদাহরণ: Before Update Trigger

ধরুন, আমরা একটি Trigger তৈরি করতে চাই, যা Account রেকর্ড আপডেট করার আগে AnnualRevenue ফিল্ড চেক করবে এবং সেটি যদি 0 হয়, তাহলে একটি নির্দিষ্ট মান দিয়ে সেট করবে।

trigger CheckAnnualRevenue on Account (before update) {
    for (Account acc : Trigger.new) {
        if (acc.AnnualRevenue == 0) {
            acc.AnnualRevenue = 50000; // Default value
        }
    }
}

এখানে CheckAnnualRevenue Trigger before update ইভেন্টে কাজ করবে এবং AnnualRevenue ফিল্ড যদি শূন্য থাকে, তাহলে এটি ডিফল্ট মান 50000 দিয়ে পূরণ করবে।


২. After Trigger এর ব্যবহার

After Trigger সাধারণত ডেটা সেভ হওয়ার পর কার্যকর হয় এবং এটি অন্য অবজেক্টের উপর নির্ভরশীল কার্যক্রম সম্পন্ন করতে ব্যবহৃত হয়। After Trigger-এ মূল ডেটা পরিবর্তন করা সম্ভব নয়, কারণ ডেটা ইতিমধ্যে ডেটাবেজে সেভ হয়ে গেছে। After Trigger-এ সাধারণত লজিকাল কাজ, যেমন- সম্পর্কিত রেকর্ড তৈরি, ইমেইল পাঠানো, বা লজ ব্যবহার করা হয়।

উদাহরণ: After Insert Trigger

ধরুন, আমরা একটি Trigger তৈরি করতে চাই, যা নতুন Account রেকর্ড তৈরি হওয়ার পর স্বয়ংক্রিয়ভাবে একটি Contact রেকর্ড তৈরি করবে, যেখানে Account এর নাম সেট করা থাকবে।

trigger CreateContactAfterAccount on Account (after insert) {
    List<Contact> contacts = new List<Contact>();
    for (Account acc : Trigger.new) {
        Contact con = new Contact(
            LastName = acc.Name,
            AccountId = acc.Id
        );
        contacts.add(con);
    }
    insert contacts;
}

এখানে CreateContactAfterAccount Trigger after insert ইভেন্টে কাজ করবে এবং প্রতিটি নতুন Account রেকর্ড তৈরি হওয়ার পর স্বয়ংক্রিয়ভাবে একটি Contact রেকর্ড তৈরি করবে।

উদাহরণ: After Update Trigger

ধরুন, আমরা একটি Trigger তৈরি করতে চাই, যা Opportunity রেকর্ড আপডেট হওয়ার পর Account রেকর্ডের Last Activity Date ফিল্ড আপডেট করবে।

trigger UpdateAccountActivity on Opportunity (after update) {
    List<Account> accounts = new List<Account>();
    for (Opportunity opp : Trigger.new) {
        Account acc = new Account(
            Id = opp.AccountId,
            LastActivityDate = Date.today()
        );
        accounts.add(acc);
    }
    update accounts;
}

এখানে UpdateAccountActivity Trigger after update ইভেন্টে কাজ করবে এবং Opportunity আপডেট হওয়ার পর সম্পর্কিত Account রেকর্ডের Last Activity Date আপডেট করবে।


Before এবং After Trigger-এর মূল পার্থক্য

বৈশিষ্ট্যBefore TriggerAfter Trigger
কার্যক্রমের সময়ডেটা সেভ হওয়ার আগে কার্যকর হয়ডেটা সেভ হওয়ার পর কার্যকর হয়
প্রক্রিয়াডেটা পরিবর্তন বা ভ্যালিডেশন করতে ব্যবহৃত হয়অন্যান্য অবজেক্টের উপর নির্ভরশীল কাজ, যেমন সম্পর্কিত রেকর্ড তৈরি, ইমেইল পাঠানো
মূল ডেটা পরিবর্তনহ্যাঁ, মূল ডেটা পরিবর্তন করা যায়না, মূল ডেটা পরিবর্তন করা যায় না
ব্যবহারডেটা ভ্যালিডেশন, ডিফল্ট মান সেট, ইত্যাদিসম্পর্কিত রেকর্ড তৈরি, ইমেইল পাঠানো, অডিটিং ইত্যাদি

সংক্ষেপে Before এবং After Trigger

  • Before Trigger: ডেটা সেভ হওয়ার আগে কার্যকর হয় এবং ডেটা মডিফাই করা যায়। সাধারণত ডেটা ভ্যালিডেশন বা প্রাথমিক সেটিং করার জন্য ব্যবহৃত হয়।
  • After Trigger: ডেটা সেভ হওয়ার পর কার্যকর হয়। এটি অন্যান্য অবজেক্টে নির্ভরশীল কাজ বা সম্পর্কিত কার্যক্রম পরিচালনার জন্য ব্যবহৃত হয়।

Before এবং After Trigger ব্যবহার করে Salesforce ডেটাবেজের ইভেন্ট-চালিত কার্যক্রম সহজ এবং স্বয়ংক্রিয় করা যায়, যা বিভিন্ন ব্যবসায়িক নিয়ম এবং প্রক্রিয়াকে কার্যকর করে।

common.content_added_by

Insert, Update, Delete Trigger Events

240
240

Insert, Update, Delete Trigger Events Apex Trigger-এর প্রধান ইভেন্ট, যা Salesforce ডেটাবেজে রেকর্ড সেভ বা পরিবর্তন করার সময় নির্দিষ্ট কার্যক্রম সম্পাদন করতে সহায়ক। প্রতিটি ইভেন্টে Before এবং After Trigger ব্যবহার করা যায়, যা ইভেন্টের সময় অনুযায়ী আলাদা কার্যক্রম সম্পন্ন করে।


১. Insert Trigger Events

Insert Trigger তখন কার্যকর হয়, যখন নতুন কোনো রেকর্ড Salesforce ডেটাবেজে তৈরি হয়। Insert Trigger-এর মাধ্যমে রেকর্ডে নতুন ডেটা সেট করা যায় এবং ডেটা যাচাই করা যায়।

Insert Trigger Events এর ধরন:

  • Before Insert: রেকর্ড সেভ হওয়ার আগে কার্যকর হয়। এটি সাধারণত নতুন ডেটা যাচাই বা ডিফল্ট মান সেট করতে ব্যবহৃত হয়।
  • After Insert: রেকর্ড সেভ হওয়ার পরে কার্যকর হয়। এটি সাধারণত সম্পর্কিত অন্যান্য রেকর্ড আপডেট করতে ব্যবহৃত হয়।

উদাহরণ: Before Insert Trigger

trigger AccountBeforeInsert on Account (before insert) {
    for (Account acc : Trigger.new) {
        if (acc.Industry == null) {
            acc.Industry = 'Technology'; // ডিফল্ট মান সেট করা হচ্ছে
        }
    }
}
  • এখানে before insert Trigger ব্যবহার করে নতুন Account রেকর্ডের Industry ফিল্ডে ডিফল্ট মান Technology সেট করা হয়েছে, যদি Industry ফিল্ড ফাঁকা থাকে।

২. Update Trigger Events

Update Trigger তখন কার্যকর হয়, যখন একটি বিদ্যমান রেকর্ডে কিছু পরিবর্তন বা আপডেট করা হয়। Update Trigger-এর মাধ্যমে ডেটা যাচাই করা এবং সম্পর্কিত অন্যান্য রেকর্ড আপডেট করা যায়।

Update Trigger Events এর ধরন:

  • Before Update: রেকর্ড আপডেট করার আগে কার্যকর হয়। এটি সাধারণত ডেটা যাচাই ও রেকর্ডের কিছু ফিল্ডের মান আপডেট করতে ব্যবহৃত হয়।
  • After Update: রেকর্ড আপডেট করার পরে কার্যকর হয়। এটি সাধারণত সম্পর্কিত রেকর্ড আপডেট বা নোটিফিকেশন পাঠাতে ব্যবহৃত হয়।

উদাহরণ: After Update Trigger

trigger ContactAfterUpdate on Contact (after update) {
    Map<Id, Account> accountMap = new Map<Id, Account>();

    for (Contact con : Trigger.new) {
        if (con.AccountId != null) {
            Account acc = new Account(Id = con.AccountId);
            acc.Last_Contacted__c = Date.today();
            accountMap.put(acc.Id, acc);
        }
    }

    update accountMap.values();
}
  • এখানে after update Trigger ব্যবহার করে Contact অবজেক্টের রেকর্ড আপডেট করার পরে সংশ্লিষ্ট Account রেকর্ডের Last_Contacted__c ফিল্ডে বর্তমান তারিখ সেট করা হচ্ছে।

৩. Delete Trigger Events

Delete Trigger তখন কার্যকর হয়, যখন একটি রেকর্ড Salesforce ডেটাবেজ থেকে মুছে ফেলা হয়। Delete Trigger-এর মাধ্যমে রেকর্ড ডিলিট করার আগে বা পরে নির্দিষ্ট কার্যক্রম সম্পন্ন করা যায়।

Delete Trigger Events এর ধরন:

  • Before Delete: রেকর্ড ডিলিট করার আগে কার্যকর হয়। এটি সাধারণত ডেটা যাচাই বা অন্য কোন শর্ত পূরণের জন্য ব্যবহৃত হয়।
  • After Delete: রেকর্ড ডিলিট করার পরে কার্যকর হয়। এটি সাধারণত সম্পর্কিত রেকর্ড বা লগ আপডেট করার জন্য ব্যবহৃত হয়।

উদাহরণ: Before Delete Trigger

trigger AccountBeforeDelete on Account (before delete) {
    for (Account acc : Trigger.old) {
        System.debug('Deleting Account: ' + acc.Name);
    }
}
  • এখানে before delete Trigger ব্যবহার করা হয়েছে, যা Account রেকর্ড ডিলিট করার আগে Account এর নাম প্রিন্ট করে।

Trigger Context Variables in Insert, Update, and Delete

Trigger Context Variables Trigger-এর বিভিন্ন ইভেন্টের সময় প্রয়োজনীয় ডেটা এবং প্রসঙ্গ প্রদান করে। কিছু গুরুত্বপূর্ণ Context Variables:

  • Trigger.new: নতুন রেকর্ডসমূহের লিস্ট রাখে, যা insert এবং update ইভেন্টে ব্যবহৃত হয়।
  • Trigger.old: পুরাতন রেকর্ডসমূহের লিস্ট রাখে, যা update এবং delete ইভেন্টে ব্যবহৃত হয়।
  • Trigger.isInsert: যদি Trigger insert ইভেন্টে কাজ করে, তাহলে true রিটার্ন করে।
  • Trigger.isUpdate: যদি Trigger update ইভেন্টে কাজ করে, তাহলে true রিটার্ন করে।
  • Trigger.isDelete: যদি Trigger delete ইভেন্টে কাজ করে, তাহলে true রিটার্ন করে।

সারসংক্ষেপ:

  • Insert Trigger Events: নতুন রেকর্ড তৈরি হলে before insert এবং after insert ইভেন্ট চালিত হয়।
  • Update Trigger Events: বিদ্যমান রেকর্ড আপডেট হলে before update এবং after update ইভেন্ট চালিত হয়।
  • Delete Trigger Events: রেকর্ড ডিলিট হলে before delete এবং after delete ইভেন্ট চালিত হয়।

Trigger Events Salesforce প্ল্যাটফর্মে ডেটা প্রসেসিং এবং অটোমেশন সহজ করে এবং ডেটাবেজ ইভেন্টের উপর ভিত্তি করে বিভিন্ন লজিক প্রয়োগ করতে সহায়ক।

common.content_added_by

Recursive Trigger এবং Trigger Best Practices

296
296

Recursive Trigger হলো এমন Trigger যা নিজেই পুনরায় কল হতে পারে, অর্থাৎ এক Trigger অন্য Trigger কে চালু করে এবং এর ফলে একটি লুপ বা পুনরাবৃত্তি তৈরি হয়। Recursive Trigger সাধারণত ডেটাবেজের ওপর অতিরিক্ত লোড তৈরি করে এবং গভর্নর লিমিট অতিক্রম করতে পারে, ফলে এটি Salesforce সিস্টেমে সমস্যা সৃষ্টি করতে পারে। তাই Recursive Trigger এড়ানো এবং ভালো কোডিং প্র্যাকটিস অনুসরণ করা জরুরি।

Recursive Trigger এড়ানোর পদ্ধতি

Recursive Trigger এড়ানোর জন্য কিছু সাধারণ পদ্ধতি অনুসরণ করা যেতে পারে:

Static Boolean Flag ব্যবহার: Static Boolean ফ্ল্যাগ ব্যবহার করে Recursive Trigger এড়ানো যায়। একটি স্ট্যাটিক ভ্যারিয়েবল তৈরি করে প্রথমবার Trigger কল হওয়ার সময় সেটিকে true সেট করা হয় এবং পরবর্তীতে Trigger চালু হলে সেটি false চেক করা হয়।

উদাহরণ:

এখানে, TriggerHandler ক্লাসে একটি Static Boolean ফ্ল্যাগ isExecuted ব্যবহার করা হয়েছে যা false চেক করার মাধ্যমে Trigger একবার চালানোর পর সেটিকে true করে। পরবর্তীতে Trigger চালু হলে এটি true চেক করবে এবং Recursive Trigger এড়ানো হবে।

public class TriggerHandler {
    public static Boolean isExecuted = false;
}

trigger PreventRecursive on Account (before update) {
    if (!TriggerHandler.isExecuted) {
        TriggerHandler.isExecuted = true;
        // Trigger Logic
        System.debug('Trigger executed only once.');
    }
}

Trigger Context Variables ব্যবহার: Trigger Context Variables, যেমন Trigger.isInsert, Trigger.isUpdate, ইত্যাদি ব্যবহার করে Trigger-এর ইভেন্ট অনুযায়ী কোডের কার্যক্রম সীমিত করা যায়। এটি অতিরিক্ত Recursive Trigger এড়াতে সহায়ক।

Handler Class ব্যবহার: Trigger Handler Pattern ব্যবহার করে Trigger কোড সেপারেট ক্লাসে স্থানান্তর করা হয়, যা ট্রিগারের কার্যক্রম নিয়ন্ত্রণে রাখে এবং Recursive Trigger এড়াতে সাহায্য করে।


Trigger Best Practices

Trigger কার্যকরী এবং ইফেক্টিভভাবে লিখতে কিছু Best Practices অনুসরণ করা উচিত:

Trigger Handler Class ব্যবহার: Trigger Handler ক্লাস ব্যবহার করে Trigger-এর লজিক পৃথক ক্লাসে রাখা উচিত। এতে কোডের রক্ষণাবেক্ষণ সহজ হয় এবং লজিক পুনরায় ব্যবহার করা যায়।

উদাহরণ:

trigger AccountTrigger on Account (before insert, after update) {
    AccountTriggerHandler.handleTrigger(Trigger.new, Trigger.oldMap);
}

public class AccountTriggerHandler {
    public static void handleTrigger(List<Account> newList, Map<Id, Account> oldMap) {
        // Trigger Logic
    }
}

Single Trigger per Object নীতি অনুসরণ করা: একটি অবজেক্টের জন্য একটি মাত্র Trigger রাখা ভালো। এটি সহজ এবং সুগঠিত কোড লেখায় সাহায্য করে।

Context-Specific Logic ব্যবহার: Trigger Context Variables (যেমন Trigger.isInsert, Trigger.isUpdate) ব্যবহার করে কোডের কার্যক্ষমতা বাড়ানো যায়। Trigger-এর জন্য নির্দিষ্ট লজিক অনুযায়ী আলাদা ব্লক তৈরি করা উচিত।

Bulkification: Trigger সবসময় Bulk করতে হবে, অর্থাৎ এটি ২০০ রেকর্ড পর্যন্ত হ্যান্ডেল করতে সক্ষম হওয়া উচিত। তাই SOQL, DML, এবং লুপগুলি Bulkified হতে হবে। একক রেকর্ডে কাজ না করে for লুপ ব্যবহার করে তালিকায় কাজ করা উচিত।

Bulkification উদাহরণ:

trigger AccountTrigger on Account (after insert) {
    List<Contact> contacts = new List<Contact>();
    for (Account acc : Trigger.new) {
        contacts.add(new Contact(LastName = acc.Name, AccountId = acc.Id));
    }
    if (!contacts.isEmpty()) {
        insert contacts;
    }
}

Avoid Hardcoding Ids: কোনো ফিল্ড বা রেকর্ডের Id হার্ডকোড করা উচিত নয়, কারণ এটি সহজে পরিবর্তনযোগ্য নয় এবং মোডিফিকেশনে সমস্যা হতে পারে। এটির পরিবর্তে Custom Settings বা Custom Metadata ব্যবহার করা উচিত।

Avoid Recursive Trigger: Recursive Trigger এড়াতে Static Boolean Flag বা Trigger Context ব্যবহার করা উচিত।

Trigger Logic Minimization: Trigger-এ বড় লজিক না রেখে Handler ক্লাস ব্যবহার করা উচিত। Trigger শুধুমাত্র প্রাথমিক কাজ সম্পন্ন করবে এবং বড় লজিক আলাদা ক্লাসে রাখা হবে।

Trigger Unit Testing: Trigger Unit Test লিখা জরুরি। Test Class ব্যবহার করে ট্রিগার কার্যক্ষমতা যাচাই করতে হবে এবং সকল লজিক কভার করতে হবে। এর জন্য Insert, Update, Delete ইভেন্টের জন্য Test Class তৈরি করা উচিত।

Order of Execution বুঝে লেখা: Salesforce Trigger-এর অর্ডার অফ এক্সিকিউশন অনুযায়ী কাজ করে। তাই Before ও After Trigger কোনটা আগে ও পরে কাজ করবে তা মাথায় রেখে কোড লিখা উচিত।

SOQL Query and DML Limits মেনে চলা: Trigger-এ SOQL কুয়েরি এবং DML অপারেশনের সংখ্যা সীমিত রাখা উচিত, যাতে গভর্নর লিমিট না ছাড়িয়ে যায়।


সংক্ষেপে Trigger Best Practices

  1. Handler Class ব্যবহার করুন।
  2. Single Trigger per Object নীতি অনুসরণ করুন।
  3. Bulkification নিশ্চিত করুন।
  4. Hardcoded Ids এড়িয়ে চলুন।
  5. Recursive Trigger এড়ানোর জন্য Static Boolean Flags ব্যবহার করুন।
  6. Unit Testing-এর মাধ্যমে Trigger যাচাই করুন।
  7. Trigger Logic Minimization নিশ্চিত করুন।
  8. Order of Execution বুঝে কোড লিখুন।

Trigger Best Practices অনুসরণ করে Trigger কোডের কার্যকারিতা এবং পুনঃব্যবহারযোগ্যতা বাড়ানো যায় এবং গভর্নর লিমিট সমস্যা এড়ানো সম্ভব হয়।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion